import box/{condit,logger,ui} api/clip frpc/check

Has-Dir $TTB_FRPC || mkdir -p $TTB_FRPC

__get_read_config(){
  Msg "按 Ctrl-C 结束编辑"
  __data=""
  trap 'printf "\r\e[K";return' SIGINT
  while true;do
    read -rp "> " __line
    __data+=$'\n'"$__line"
  done
}

__get_clip_config(){
  __data="$(Get-Clip)"
}

__get_edit_config(){
  __tmp='~frpc.tmp.toml'
  touch "$__tmp"
  [ "$EDITOR" ] &&
  for i in {vim,vi,micro,hx,nano};do
    Has-Cmd $i && { EDITOR="$i";break;}
  done
  Msg "使用 $EDITOR 编辑"
  sleep 1s
  $EDITOR "$__tmp"
  __data="$(cat "$__tmp")"
  rm "$__tmp"
}

  Way=(
    "手动输入配置"
    "使用剪切板导入"
    "使用编辑器写入配置"
  )
  
  Fun=(
     __get_read_config
     __get_clip_config
     __get_edit_config
  )
  
__read(){
  printf "\e[?25l"
  Check-Frpc-Config <<< "$__data" || { sleep 0.3s;printf "\e[1A\r\e[K";__main;return;}
  printf "\e[?25h"
  cd $TTB_FRPC
  Msg "为配置命名"
  read -rep "> " __name
  if Has-File "$__name";then
    Get-Ask-Ui "已有同名文件，是否覆盖？" no
    case $__return__ in
      yes)echo "$__data" > "$__name";;
      no)$FUNCNAME;return;;
    esac
  else
    echo "$__data" > "$__name"
  fi
}
  
__main(){
  Get-List-Ui \
      --title="选择配置导入方式，数据格式仅限 TOML" \
      --tip="按 ↑↓ 选择, 按 Ether 选中, 按 ESC 退出" \
      --print-choose --print-number --retract --beep \
      "${Way[@]}"
  ((__return__)) || { Info "取消";exit;}
  __way="${Way[__return__-1]}"
  __fun="${Fun[__return__-1]}"
  
  Get-Ask-Ui "将$__way并校验" yes
  case $__return__ in
    yes)
      eval "$__fun"
      ;;
    no|exit)
      Msg "\e[?25l取消" -n
      sleep 0.3s
      printf "\r\e[K"
      $FUNCNAME
      return 0
      ;;
  esac
  __read
  Msg "完成"
}

__main